package main

import "fmt"

type MyError struct {
	Msg  string
	File string
	Line int
}

func (e *MyError) Error() string {
	return fmt.Sprintf("File : %s , Line : %d , Msg : %s", e.File, e.Line, e.Msg)
}

func test() error {
	return &MyError{
		"someting happenend",
		"server.go",
		20,
	}
}

func main() {
	err := test()
	//switch 类型断言
	switch err := err.(type) {
	case nil:
	case *MyError:
		fmt.Println(err)
	default:
	}
}
